package com.cskaoyan.javase.homework.day04;

import java.util.Arrays;

/**
 * 把一个数组中的某个元素全部去掉，并统计有几个该元素
 * 思考，分析一下：
 * 首先数组能不能真正删除一个元素？不行，数组的长度一旦确定，就不可以修改
 * 那怎么删除？
 * 只能是新建一个数组，将不是删除目标的元素，全部复制过去
 * 新建的数组长度是多少？里面的元素该是什么？
 * 新数组长度 = 老数组长度 - 被删除元素的个数
 * 新数组 = 老数组的元素 - 被删除的元素（遍历老数组，判断不是删除元素，就赋值给新数组中）
 *
 * @since 09:33
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class DeleteDemo {
    public static void main(String[] args) {
        // 创建一个int数组
        int[] oldArr = {1, 2, 3, 4324, 23, 4, 23, 312, 3, 1, 3, 1, 121, 1, 11, 9};
        int target = 1;

        System.out.println(getDeleteElementNum(oldArr, target));

        // 创建新数组
        int[] newArr = new int[oldArr.length - getDeleteElementNum(oldArr, target)];

        // 开始将老数组中的元素拷贝到新数组
        copy(oldArr, newArr, target);
        System.out.println(Arrays.toString(oldArr));
        System.out.println(Arrays.toString(newArr));

    }

    // 求被删除元素的个数
    public static int getDeleteElementNum(int[] arr, int target) {
        // 首先要定义一个计数器
        int count = 0;
        // 遍历arr数组
        for (int ele : arr) {
            // 判断是否是目标元素
            if (ele == target) {
                count++;
            }
        }
        return count;
    }

    // 将老数组中的元素拷贝到新数组，返回值类型可以给，也可以不给
    public static void copy(int[] oldArr, int[] newArr, int target) {
        // 遍历老数组，然后拷贝元素
        // 定义新数组的下标，从0开始
        int newIndex = 0;
        for (int i = 0; i < oldArr.length; i++) {
            if (oldArr[i] != target) {
                // i是老数组的下标，它比新数组的下标范围要广。新数组一旦使用，会数组下标越界，所以我们自己需要给他一个下标
                newArr[newIndex] = oldArr[i];
                newIndex++;
            }
        }
    }

}
